#ifndef ALL2H
#define ALL2H

//#include "EPlateau.h"
#include <vector>
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>

#define HAUT 0
#define DROIT 1
#define BAS 2
#define GAUCHE 3

class EPlateau;

class noeudUCT;


using namespace std;




struct Piece{
	short numero;
	char haut;
	char bas;
	char gauche;
	char droit;
	bool estPose; // Sert aussi parfois à savori si la case est jouable dans certaines utilisations.
};


struct Coord {
	char x;
	char y;
};

struct Coup {
	char orientation;
	Piece p;
	Coord place;
};

struct Po { //piece orientée
	char orient;
	Piece p;
};


Piece poToPiece (Po piece); //rtenvoi une piece dont les valeurs des bords ont été "échangées" pour tennir compte de l'orientation.
Po coupToPo (Coup c);
Piece coupToPiece(Coup c);

//saveur
void saveWrite(ofstream *fichier, char num);

void sauvegarde(EPlateau * ep, int num);

bool operator==(Coord c, Coord c2);

bool operator==(Piece p, Piece p2);

bool operator==(Po c, Po c2);

bool operator==(Coup c, Coup c2);

ostream &operator<<( ostream &out, Piece p );

ostream &operator<<( ostream &out, Coup c );

ostream &operator<<( ostream &out, Coord c );

ostream &operator<<( ostream &out, noeudUCT &noeud );

Coord operator+( Coord c, Coord c2 );


#endif
